package com.mp.ipm2020.mbg.service;

import com.mp.ipm2020.mbg.dto.UpdateUserPasswordParam;
import com.mp.ipm2020.mbg.dto.UserParam;
import com.mp.ipm2020.mbg.model.Resource;
import com.mp.ipm2020.mbg.model.Role;
import com.mp.ipm2020.mbg.model.User;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author adidasshe
 * @since 2020-05-08
 */
public interface UserService extends IService<User> {
    /**
     * 根据用户名获取后台用户
     *
     * @param username
     * @return
     */
    User getUserByUsername(String username);

    /**
     * 注册功能
     */
    User register(UserParam userParam);

    /**
     * 登录功能
     *
     * @param username 用户名
     * @param password 密码
     * @return 生成的JWT的token
     */
    String login(String username, String password);



    /**
     * 刷新token的功能
     * @param oldToken 旧的token
     */
    String refreshToken(String oldToken);


    /**
     * 根据用户名或昵称分页查询用户
     */
    List<User> list(String keyword, Integer pageSize, Integer pageNum);

    /**
     * 修改指定用户状态
     */
    boolean updateStatusById(Long id, User user);



    /**
     * 修改用户角色关系
     */
    @Transactional
    boolean updateRole(Long adminId, List<Long> roleIds);

    /**
     * 获取用户对应角色
     */
    List<Role> getRoleList(Long userId);

    /**
     * 获取指定用户的可访问资源
     */
    List<Resource> getResourceList(Long userId);

    /**
     * 修改密码
     */
    int updatePassword(UpdateUserPasswordParam updatePasswordParam);

    /**
     * 获取用户信息
     */
    UserDetails loadUserByUsername(String username);
}
